from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import AreaInfo
from . import serializers
from rest_framework_extensions.cache.mixins import CacheResponseMixin


# 当前需要查询多个、一个
class AreaViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
    # queryset = AreaInfo.objects.filter(parent__isnull=True)
    # 查询多个时，需要查询所有的省
    # 查询一个时，需要根据主键查询指定的对象，查询范围应该是所有数据
    def get_queryset(self):
        # 知识点1：当需要判断返回不同查询集时，不使用属性，而使用方法
        # 知识点2：查询的方式为get，在视图集中区分不同的请求
        # 查询多个的方法为list
        # 查询一个的方法为retrieve
        # 在视图集对象上，有属性action可以获取方法的名称
        if self.action == 'list':
            # 查询多个
            return AreaInfo.objects.filter(parent__isnull=True)
        # else:
        # 查询一个：根据主键查询，需要指定查询范围
        return AreaInfo.objects.all()

    # serializer_class = serializers.AreaSerializer
    # 查询多个时，返回省，包含id、name
    # 查询一个时，返回地区及子地区，包含id、name、subs,subs中包含id、name
    def get_serializer_class(self):
        if self.action == 'list':
            return serializers.AreaSerializer
        # else:
        return serializers.SubAreaSerializer
